既存のプロジェクトを Docker 化する手順について

はじめに

今回はRailsのプロジェクトを Docker 化を紹介します。よろしくお願いします。

Docker 化することの意味

Docker 化することで開発環境を共有でき、さらに Dockerfile を共有することで複数人で共通の環境を構築できます。OS ごとに挙動が変わることがなく、また、コンテナという仮想環境で作業するので自分の PC にあれこれインストールしなくて済みます。

Docker 化の手順

1. githubから Web アプリのソースコードを引っ張ってきます。(今回はRailsアプリ) 2. Dockerfile、docker-compose.yml というものを作ります。 3. database.yml というファイルを編集します。 4. Docker のイメージ・コンテナ・データベースを作成し、プロジェクト起動

1. githubから Web アプリのソースコードを引っ張ってくる

git clone というコマンドでgithubに上がっているプロジェクトのソースコードをローカル環境(自分のパソコン)に持ってきます。

git clone (リポジトリの SSH key)

リポジトリSSH key は(git@github.com)から始まるやつです。

2. Dockerfile、docker-compose.yml を作成

Docker コンテナという仮想環境を作りたいのですが、その前に準備が必要です。

Dockerfile 作成

Dockerimage 作成

Docker コンテナ 作成

コンテナ作成は上記の流れになります。 今回のアプリはRails + postgresql(データベース)を使用します。Railsで一つのコンテナ、postgresqlで一つのコンテナ、計2つのコンテナを使用するので、複数のコンテナを定義・実行・管理できる Docker compose というものを使います。

Dockerfile を作成 Dockerfile は Dockerimage の設計図のようなものです。パッケージのインストールや作業ディレクトリなど様々な設定を行います。touch コマンドで Dockerfile を作成し以下のように記述します。

ruby のバージョン指定

FROM ruby:3.2.2

# パッケージをインストール

  RUN apt-get update && apt-get install -y \
  build-essential \

  libpq-dev \

  nodejs\

  postgresql-client \

  yarn

# 作業ディレクトリを rails-docke に指定

  WORKDIR /rails-docker

# Gemfile Gemfile.lock を rails-docker に追加

  COPY Gemfile Gemfile.lock /rails-docker/

# bundle install を実行

  RUN bundle install

docker-compose.yml を作成

docker-compose.yml とは、Docker Compose を使うための設定を定義するファイルです。docker-compose.yml でそれぞれのコンテナについて条件を定義します。touch コマンドで docker-compose.yml を作成し以下のように記述します。

コンテナのバージョンを指定

  version: "3"

データを保存する場所を設定

volumes:
  db-data:

各コンテナの設定

  services:

web コンテナの設定

  web:

現在のディレクトリで Dockerfile のイメージをビルド

  build: .

コンテナ起動時にコマンドを実行

  command: bundle exec rails s -p 3000 -b '0.0.0.0'

ポート番号を 3000 に設定

ports:
  - "3000:3000"

ローカル側とコンテナ側で同期したいディレクトリを設定

volumes:
  - .:/rails-docker

db コンテナから起動するように設定

depends_on:
  - db

環境変数を設定

environment:
  - "DATABASE_PASSWORD=postgres"

db コンテナの設定

  db:

postgresql のバージョンを設定

  image: postgres:12

環境変数を設定

environment:

  - POSTGRES_USER=postgres

  - POSTGRES_PASSWORD=postgres

  - POSTGRES_HOST_AUTH_METHOD=trust

ホストの db データをコンテナに共有


volumes:

  - db-data:/var/lib/postgresql/data

3. database.yml ファイルの編集

database.yml はRailsがデータベースに接続する時に必要になる情報を保管しています。host、username、password を設定します。

default: &default

  adapter: postgresql

  encoding: unicode

  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

  host: db

  username: postgres

  password: postgres

development:

  <<: \*default

  database: myapp_development

test:

  <<: \*default

  database: myapp_test

production:

  <<: \*default

  database: myapp_production

  username: myapp

  password: <%= ENV["MYAPP\_DATABASE\_PASSWORD"] %>

ファイルに以下の記述を追加しました。

  host: db

  username: postgres

  password: postgres

4. Docker のイメージ・コンテナ・データベース作成しプロジェクト起動

下記コマンドでイメージを作成します。

docker-compose build

下記コマンドでコンテナを作成します。

  docker-compose up -d

そして、コンテナの中に下記コマンドで入ります

  docker-compose exec web bash

コンテナの中に入ったら下記コマンドでRailsのデータベースを作成します。

  rails db:create



  rails db:migrate

この後 exit でコンテナを抜け、

  docker-compose up

をコマンドで実行し、ブラウザのアドレスバーにhttp://localhost:3000と入力します。プロジェクトの画面が出力されていれば成功です。 プロジェクトは ctrl + C で終了できます。

おわりに

今回はプロジェクトを Docker 化する方法を紹介しました。私も含め初学者にとっては難しい内容ではありますが、使いこなせば大きな恩恵を受けられるので、これからも Docker の学習を継続したいと思います。